HCA Healthcare

HCA (NYSE: HCA) is a for-profit medical facilities operator that owns 186 hospitals and over 2,000 other care sites. HCA was initially public, but went private in 2007 after an insider trading scandal and allegations of making false business claims. The company went public again 3 years later in 2010. The company’s stock has almost doubled in the past year and has shown consistent growth over the past 5 years with a current market cap of over $66 billion. They have benefited heavily from industry tailwinds, as characterized from last year’s earning call.

I think the first point I would make is, we believe, and we’ve said this, and we continue to believe and we’re seeing evidence even in 2019, that there is growing demand for healthcare services in HCA’s markets. -Samuel N. Hazen, CEO

In their 10K for FY2019, HCA listed the following as their strategic goals: - Grow our presence in existing markets - Achieve industry-leading performance in clinical and satisfaction measures; - Recruit and employ physicians to meet the need for high quality health services - Continue to leverage our scale and market positions to grow the Company - Pursue a disciplined development strategy

In the corresponding earnings call (Jan 28th, 2020), CFO William B. Rutherford describes strong growth in patient volumes (i.e. Medicare admissions grew 4.3% YoY), while holding down operating expenses (operating expenses per equivalent admission grew just 0.8%).

Our thesis: For-profit hospital that should theoretically be generating as much revenue per patient as a not-for-profit hospital (for public payors). However, HCA has an markedly higher incentive to cut down on operating expenses to return value to shareholders.

Empirical Model

We test our thesis of growth in margins using publicly available datasets on hospital finances. We develop a case study of the Tampa-St. Petersburg metropolitan area given the high concentration of HCA-owned hospitals in the region. We test several outcome variables measuring volumes and opex iusing simple parametric and nonparametric regression models across the years 2015 to 2019.

Data

Cost Reports

We utilize the Health Costs Reporting Information System (HCRIS) database, known colloquially as the Medicare cost reports. The cost reports are filed annually by hospitals to the Centers for Medicare and Medicaid Services (CMS), and are mandated for federally qualified health centers, including hospitals that receive Medicare reimbursement. The cost reports contain valuable information on hospital financial statements: including revenues, discharges, and operating expenses per fiscal year. We obtain cost reports from 2010 through 2020, and implement processing scripts from Ian McCarthy and the National Bureau of Economic Research (NBER) to extract human-readable datasets.

There are 6738 unique hospitals represented across the 10 years, filing over 57379 cost reports in the ten-year span. A subset of the cost reports for the UVA Health System is shown below:


HCA Data

To obtain attributes of HCA-owned hospitals, we scrape public-facing location data from the HCA website using Python scripts. We obtain data on 202 HCA-owned hospitals nation-wide, including location and contact information.

Scraping Hospital Locations from HCA Healthcare


HCA currently owns and operates 46 hospitals in the state of Florida. Use the plot below to explore HCA market penetration in the United States.

We define the Tampa-St.Petersburg market as the four adjacent counties: Pasco, Hillsborough, Pinellas, and Hernando. Of the 41 hospitals in the region in 2019, 8 are HCA-owned (20%).

Statistical Modelling

We first model Medicare discharges in the region, controlling for year effects using a M-estimator robust least-squares (RLM) design. We find a significant coefficient associated with HCA ownership.

  Medicare Discharges
Predictors Estimates CI p
Intercept 143169.65 -283851.03 – 570190.32 0.509
HCA Ownership 1621.97 847.56 – 2396.37 <0.001
Year Effect -69.71 -281.42 – 142.01 0.517
Observations 209

We find no such effect when modeling Medicaid volumes.

  Medicaid Discharges
Predictors Estimates CI p
Intercept 34708.73 -31293.00 – 100710.46 0.301
HCA Ownership -4.68 -121.59 – 112.23 0.937
Year Effect -17.04 -49.76 – 15.69 0.306
Observations 189

We then impute other discharges, accounting for commercial patients and uncompensated care. Standardizing these values against hospital size, we find no significant effect of HCA ownership.

  Commercial and Uncompensated Discharges per Bed
Predictors Estimates CI p
Intercept -1250.58 -3978.84 – 1477.68 0.367
HCA Ownership 3.47 -1.36 – 8.31 0.158
Year Effect 0.63 -0.72 – 1.99 0.357
Observations 189

We model operating expenses per discharge, a proxy for spend per patient.

  Total OpEx per Discharge
Predictors Estimates CI p
Intercept -2379231.57 -5802505.39 – 1044042.25 0.172
HCA Ownership -11835.25 -18043.39 – -5627.10 <0.001
Year Effect 1192.94 -504.30 – 2890.17 0.167
Observations 209
R2 / R2 adjusted 0.071 / 0.062

Conclusions

Our analysis serves as a rough retrospective analysis of a top-tier healthcare company. Using federally-audited data, we match per-firm financial performance to corporate growth strategies implemented by leadership. In a case study of the Tampa market, we find preliminary evidence to support volume growth in some operating segments, notably with Medicare. Strikingly, we observe strong evidence of lower operating expenses per patient, supporting HCA’s ability to drive growth while suppressing costs at a per-facility level.

There are several limitations with our approach. While we drill-down to the Tampa market to maintain similar patient and payor mixes (disease profiles of the population, and insurance preferences in the region), we are unable to extend our conclusions to other markets (i.e. Dallas-Fort Worth) without further investigation. Furthermore, we omit several key covariates, and do not match observations on hospital attributes. In other words, Medicare patients may be self-selecting into HCA hospitals based on population distributions, referral networks, or hospital size, not necessarily because of HCA marketing or leadership.


LS0tCnRpdGxlOiB8CiAgfCBBbmFseXNpcyBvZiBIQ0EgSGVhbHRoY2FyZQpzdWJ0aXRsZTogfAogIHwgSG9zcGl0YWwgUGVyZm9ybWFuY2UgaW4gdGhlIFRhbXBhIE1hcmtldCBmcm9tIDIwMTUtMjAxOQphdXRob3I6IHwKICB8IFlhcm8gTG90b3NreXkgYW5kIElzaGFhbiBEZXkKICB8IEFsdGVybmF0aXZlIEludmVzdG1lbnQgRnVuZDogUmlzayBHcm91cApkYXRlOiAiMjMgQXByaWwgMjAyMSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgIyBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGRmX3ByaW50OiBwYWdlZAogICAgdGhlbWU6IGNvc21vCiAgICAjIGNzczogImRhcmstc3R5bGUuY3NzIgotLS0KCiFbXShoY2EtbG9nby5wbmcpe3dpZHRoPTMwJX0KCioqKioqCgojIyBIQ0EgSGVhbHRoY2FyZQoKSENBIChOWVNFOiBIQ0EpIGlzIGEgZm9yLXByb2ZpdCBtZWRpY2FsIGZhY2lsaXRpZXMgb3BlcmF0b3IgdGhhdCBvd25zIDE4NiBob3NwaXRhbHMgYW5kIG92ZXIgMiwwMDAgb3RoZXIgY2FyZSBzaXRlcy4gSENBIHdhcyBpbml0aWFsbHkgcHVibGljLCBidXQgd2VudCBwcml2YXRlIGluIDIwMDcgYWZ0ZXIgYW4gaW5zaWRlciB0cmFkaW5nIHNjYW5kYWwgYW5kIGFsbGVnYXRpb25zIG9mIG1ha2luZyBmYWxzZSBidXNpbmVzcyBjbGFpbXMuIFRoZSBjb21wYW55IHdlbnQgcHVibGljIGFnYWluIDMgeWVhcnMgbGF0ZXIgaW4gMjAxMC4gVGhlIGNvbXBhbnnigJlzIHN0b2NrIGhhcyBhbG1vc3QgZG91YmxlZCBpbiB0aGUgcGFzdCB5ZWFyIGFuZCBoYXMgc2hvd24gY29uc2lzdGVudCBncm93dGggb3ZlciB0aGUgcGFzdCA1IHllYXJzIHdpdGggYSBjdXJyZW50IG1hcmtldCBjYXAgb2Ygb3ZlciAkNjYgYmlsbGlvbi4gVGhleSBoYXZlIGJlbmVmaXRlZCBoZWF2aWx5IGZyb20gaW5kdXN0cnkgdGFpbHdpbmRzLCBhcyBjaGFyYWN0ZXJpemVkIGZyb20gbGFzdCB5ZWFyJ3MgZWFybmluZyBjYWxsLgoKPiBJIHRoaW5rIHRoZSBmaXJzdCBwb2ludCBJIHdvdWxkIG1ha2UgaXMsIHdlIGJlbGlldmUsIGFuZCB3ZSd2ZSBzYWlkIHRoaXMsIGFuZCB3ZSBjb250aW51ZSB0byBiZWxpZXZlIGFuZCB3ZSdyZSBzZWVpbmcgZXZpZGVuY2UgZXZlbiBpbiAyMDE5LCB0aGF0IHRoZXJlIGlzIGdyb3dpbmcgZGVtYW5kIGZvciBoZWFsdGhjYXJlIHNlcnZpY2VzIGluIEhDQSdzIG1hcmtldHMuIC1TYW11ZWwgTi4gSGF6ZW4sIENFTwoKSW4gdGhlaXIgMTBLIGZvciBGWTIwMTksIEhDQSBsaXN0ZWQgdGhlIGZvbGxvd2luZyBhcyB0aGVpciBzdHJhdGVnaWMgZ29hbHM6Ci0gR3JvdyBvdXIgcHJlc2VuY2UgaW4gZXhpc3RpbmcgbWFya2V0cwotIEFjaGlldmUgaW5kdXN0cnktbGVhZGluZyBwZXJmb3JtYW5jZSBpbiBjbGluaWNhbCBhbmQgc2F0aXNmYWN0aW9uIG1lYXN1cmVzOwotIFJlY3J1aXQgYW5kIGVtcGxveSBwaHlzaWNpYW5zIHRvIG1lZXQgdGhlIG5lZWQgZm9yIGhpZ2ggcXVhbGl0eSBoZWFsdGggc2VydmljZXMKLSBDb250aW51ZSB0byBsZXZlcmFnZSBvdXIgc2NhbGUgYW5kIG1hcmtldCBwb3NpdGlvbnMgdG8gZ3JvdyB0aGUgQ29tcGFueQotIFB1cnN1ZSBhIGRpc2NpcGxpbmVkIGRldmVsb3BtZW50IHN0cmF0ZWd5CgpJbiB0aGUgY29ycmVzcG9uZGluZyBlYXJuaW5ncyBjYWxsIChKYW4gMjh0aCwgMjAyMCksIENGTyBXaWxsaWFtIEIuIFJ1dGhlcmZvcmQgZGVzY3JpYmVzIHN0cm9uZyBncm93dGggaW4gcGF0aWVudCB2b2x1bWVzIChpLmUuIE1lZGljYXJlIGFkbWlzc2lvbnMgZ3JldyA0LjMlIFlvWSksIHdoaWxlIGhvbGRpbmcgZG93biBvcGVyYXRpbmcgZXhwZW5zZXMgKG9wZXJhdGluZyBleHBlbnNlcyBwZXIgZXF1aXZhbGVudCBhZG1pc3Npb24gZ3JldyBqdXN0IDAuOCUpLgoKT3VyIHRoZXNpczogRm9yLXByb2ZpdCBob3NwaXRhbCB0aGF0IHNob3VsZCB0aGVvcmV0aWNhbGx5IGJlIGdlbmVyYXRpbmcgYXMgbXVjaCByZXZlbnVlIHBlciBwYXRpZW50IGFzIGEgbm90LWZvci1wcm9maXQgaG9zcGl0YWwgKGZvciBwdWJsaWMgcGF5b3JzKS4gSG93ZXZlciwgSENBIGhhcyBhbiBtYXJrZWRseSBoaWdoZXIgaW5jZW50aXZlIHRvIGN1dCBkb3duIG9uIG9wZXJhdGluZyBleHBlbnNlcyB0byByZXR1cm4gdmFsdWUgdG8gc2hhcmVob2xkZXJzLgoKIyMjIEVtcGlyaWNhbCBNb2RlbAoKV2UgdGVzdCBvdXIgdGhlc2lzIG9mIGdyb3d0aCBpbiBtYXJnaW5zIHVzaW5nIHB1YmxpY2x5IGF2YWlsYWJsZSBkYXRhc2V0cyBvbiBob3NwaXRhbCBmaW5hbmNlcy4gV2UgZGV2ZWxvcCBhIGNhc2Ugc3R1ZHkgb2YgdGhlIFRhbXBhLVN0LiBQZXRlcnNidXJnIG1ldHJvcG9saXRhbiBhcmVhIGdpdmVuIHRoZSBoaWdoIGNvbmNlbnRyYXRpb24gb2YgSENBLW93bmVkIGhvc3BpdGFscyBpbiB0aGUgcmVnaW9uLiBXZSB0ZXN0IHNldmVyYWwgb3V0Y29tZSB2YXJpYWJsZXMgbWVhc3VyaW5nIHZvbHVtZXMgYW5kIG9wZXggaXVzaW5nIHNpbXBsZSBwYXJhbWV0cmljIGFuZCBub25wYXJhbWV0cmljIHJlZ3Jlc3Npb24gbW9kZWxzIGFjcm9zcyB0aGUgeWVhcnMgMjAxNSB0byAyMDE5LiAKCiMjIERhdGEKCmBgYHtyLCBpbmNsdWRlPUZ9CmtuaXRyOjpvcHRzX2NodW5rJHNldChpbmNsdWRlID0gRiwgbWVzc2FnZSA9IEYsIHdhcm5pbmcgPSBGLAogICAgICAgICAgICAgICAgICAgICAgZWNobz1GLCBldmFsPVQsIGNvbW1lbnQ9TkEsIGNhY2hlPUYsCiAgICAgICAgICAgICAgICAgICAgICByb3dzLnByaW50PTUKICAgICAgICAgICAgICAgICAgICAgICNmaWcuaGVpZ2h0PTQKICAgICAgICAgICAgICAgICAgICAgICkKYGBgCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoTUFTUykKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoYnJvb20pCmBgYAoKYGBge3J9CmNyIDwtIHJlYWRyOjpyZWFkX2NzdignZGF0YS9IQ1JJU18yMDEwLTIwMjBfcHJvY2Vzc2VkLmNzdicpICU+JSBzZWxlY3QoLVgxKQpsb2NzIDwtIHJlYWRyOjpyZWFkX2NzdignZGF0YS9ob3NwaXRhbC1sb2NhdGlvbnMuY3N2JykKCmNvbG5hbWVzKGxvY3MpIDwtIHRvbG93ZXIoY29sbmFtZXMobG9jcykpCmNvbG5hbWVzKGNyKSA8LSB0b2xvd2VyKGNvbG5hbWVzKGNyKSkKYGBgCgojIyMgQ29zdCBSZXBvcnRzCgpXZSB1dGlsaXplIHRoZSBIZWFsdGggQ29zdHMgUmVwb3J0aW5nIEluZm9ybWF0aW9uIFN5c3RlbSAoSENSSVMpIGRhdGFiYXNlLCBrbm93biBjb2xsb3F1aWFsbHkgYXMgdGhlIE1lZGljYXJlIGNvc3QgcmVwb3J0cy4gVGhlIGNvc3QgcmVwb3J0cyBhcmUgZmlsZWQgYW5udWFsbHkgYnkgaG9zcGl0YWxzIHRvIHRoZSBDZW50ZXJzIGZvciBNZWRpY2FyZSBhbmQgTWVkaWNhaWQgU2VydmljZXMgKENNUyksIGFuZCBhcmUgbWFuZGF0ZWQgZm9yIGZlZGVyYWxseSBxdWFsaWZpZWQgaGVhbHRoIGNlbnRlcnMsIGluY2x1ZGluZyBob3NwaXRhbHMgdGhhdCByZWNlaXZlIE1lZGljYXJlIHJlaW1idXJzZW1lbnQuIFRoZSBjb3N0IHJlcG9ydHMgY29udGFpbiB2YWx1YWJsZSBpbmZvcm1hdGlvbiBvbiBob3NwaXRhbCBmaW5hbmNpYWwgc3RhdGVtZW50czogaW5jbHVkaW5nIHJldmVudWVzLCBkaXNjaGFyZ2VzLCBhbmQgb3BlcmF0aW5nIGV4cGVuc2VzIHBlciBmaXNjYWwgeWVhci4gV2Ugb2J0YWluIGNvc3QgcmVwb3J0cyBmcm9tIDIwMTAgdGhyb3VnaCAyMDIwLCBhbmQgaW1wbGVtZW50IHByb2Nlc3Npbmcgc2NyaXB0cyBmcm9tIElhbiBNY0NhcnRoeSBhbmQgdGhlIE5hdGlvbmFsIEJ1cmVhdSBvZiBFY29ub21pYyBSZXNlYXJjaCAoTkJFUikgdG8gZXh0cmFjdCBodW1hbi1yZWFkYWJsZSBkYXRhc2V0cy4KClRoZXJlIGFyZSBgciBjciRwcm92aWRlcl9udW1iZXIgJT4lIHVuaXF1ZSAlPiUgbGVuZ3RoYCB1bmlxdWUgaG9zcGl0YWxzIHJlcHJlc2VudGVkIGFjcm9zcyB0aGUgMTAgeWVhcnMsIGZpbGluZyBvdmVyIGByICBucm93KGNyKWAgY29zdCByZXBvcnRzIGluIHRoZSB0ZW4teWVhciBzcGFuLiBBIHN1YnNldCBvZiB0aGUgY29zdCByZXBvcnRzIGZvciB0aGUgVVZBIEhlYWx0aCBTeXN0ZW0gaXMgc2hvd24gYmVsb3c6CgpgYGB7ciwgaW5jbHVkZT1UfQpjciAlPiUgZmlsdGVyKHByb3ZpZGVyX251bWJlciA9PSA0OTAwMDksIAogICAgICAgICAgICAgICMgeWVhciAlaW4lIDIwMTY6MjAyMAogICAgICAgICAgICAgICkgJT4lIAogIHNlbGVjdChzdGFydHNfd2l0aCgnZnknKSwgYmVkcywgCiAgICAgICAgIHRvdF9kaXNjaGFyZ2VzLCB0b3Rfb3BlcmF0aW5nX2V4cCwgdG90X2NoYXJnZXMsIAogICAgICAgICBpcF9jaGFyZ2VzLCBpY3VfY2hhcmdlcywgCiAgICAgICAgIG1jYXJlX2Rpc2NoYXJnZXMsIG1jYWlkX2Rpc2NoYXJnZXMsCiAgICAgICAgIHN0cmVldCwgY2l0eSwgc3RhdGUpICU+JQogIGFycmFuZ2UoZGVzYyhmeV9lbmQpKQpgYGAKCioqKioqKgoKIyMjIEhDQSBEYXRhCgpUbyBvYnRhaW4gYXR0cmlidXRlcyBvZiBIQ0Etb3duZWQgaG9zcGl0YWxzLCB3ZSBzY3JhcGUgcHVibGljLWZhY2luZyBsb2NhdGlvbiBkYXRhIGZyb20gdGhlIEhDQSB3ZWJzaXRlIHVzaW5nIFB5dGhvbiBzY3JpcHRzLiBXZSBvYnRhaW4gZGF0YSBvbiBgciBucm93KGxvY3MpYCBIQ0Etb3duZWQgaG9zcGl0YWxzIG5hdGlvbi13aWRlLCBpbmNsdWRpbmcgbG9jYXRpb24gYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24uCgohWypTY3JhcGluZyBIb3NwaXRhbCBMb2NhdGlvbnMgZnJvbSBIQ0EgSGVhbHRoY2FyZSpdKGhjYS1zY3JhcGluZy5wbmcpCgpgYGB7ciwgaW5jbHVkZT1UfQpsb2NzICU+JSBzZWxlY3QoLXR5cGUsLWxhdGl0dWRlLC1sb25naXR1ZGUsKQpgYGAKCgoKYGBge3J9CmRmIDwtIGNyICU+JSBtdXRhdGUoemlwNSA9IHN1YnN0cih6aXAsMSw1KSkgJT4lIAogIGxlZnRfam9pbihsb2NzICU+JSBtdXRhdGUocHJvdmlkZXJfbmFtZSA9IHRvdXBwZXIodGl0bGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJzaGlwID0gJ0hDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICBieT1jKCdwcm92aWRlcl9uYW1lJz0ncHJvdmlkZXJfbmFtZScsJ3ppcDUnPSd6aXAnKSkgJT4lCiAgbXV0YXRlKG93bmVyc2hpcCA9IGRwbHlyOjpjYXNlX3doZW4ob3duZXJzaGlwID09ICdIQ0EnfidIQ0EnLFR+J090aGVyJyksCiAgICAgICAgIG93bmVyc2hpcCA9IHJlbGV2ZWwoYXMuZmFjdG9yKG93bmVyc2hpcCksIHJlZj0nT3RoZXInKSwKICAgICAgICAgb3RoZXJfZGlzY2hhcmdlcyA9IHRvdF9kaXNjaGFyZ2VzIC0gbWNhcmVfZGlzY2hhcmdlcyAtIG1jYWlkX2Rpc2NoYXJnZXMKICAgICAgICAgKSAlPiUKICBmaWx0ZXIoeWVhciAhPSAyMDIwKSAKYGBgCgoKYGBge3J9CnRhbXBhLmNvdW50aWVzIDwtIGMoJ1BBU0NPJywKICAgICAgICAgICAgICAgICAgICAnSElMTFNCT1JPVUdIJywnSElMTFNCT1JPJywnSElMTFNCT1VSR0gnLAogICAgICAgICAgICAgICAgICAgICdQSU5FTExBUycsJ1BJTk5FTExBUycsCiAgICAgICAgICAgICAgICAgICAgJ0hFUk5BTkRPJykKdGFtcGEuemlwcyA8LSBjKDMzNjAyLCAzMzYwMywgMzM2MDQsIDMzNjA1LCAzMzYwNiwgMzM2MDcsIDMzNjA5LCAzMzYxMCwgMzM2MTEsIDMzNjEyLCAzMzYxMywgMzM2MTQsIDMzNjE1LCAzMzYxNiwgMzM2MTcsIDMzNjE4LCAzMzYxOSwgMzM2MjAsIDMzNjIxLCAzMzYyOSwgMzM2MzQsIDMzNjM1LCAzMzYzNywgMzM2NDcpCgp0YW1wYS5ob3NwLmRmIDwtIGRmICU+JSBmaWx0ZXIoY291bnR5ICVpbiUgdGFtcGEuY291bnRpZXMpICU+JSAKICBncm91cF9ieShwcm92aWRlcl9udW1iZXIpICU+JSBzbGljZSgxKSAlPiUgdW5ncm91cCgpIAoKdGFibGUodGFtcGEuaG9zcC5kZiRvd25lcnNoaXAsIHRhbXBhLmhvc3AuZGYkY291bnR5KQoKdGFtcGEuaG9zcHMgPC0gdGFtcGEuaG9zcC5kZiRwcm92aWRlcl9udW1iZXIKYGBgCgpgYGB7cn0KZGYudGFtcGEgPC0gZGYgJT4lIGZpbHRlcih5ZWFyICVpbiUgMjAxNToyMDE5LCBwcm92aWRlcl9udW1iZXIgJWluJSB0YW1wYS5ob3NwcykKZGYudGFtcGEKYGBgCmBgYHtyLCBldmFsPUZ9CnB1YnMgPC0gYygiVGhlIEFuZ2VsLCBCZXJtb25kc2V5IiwgIlRoZSBDaHVyY2hpbGwgQXJtcywgTm90dGluZyBIaWxsIiwgIlRoZSBBdWxkIFNoaWxsZWxhZ2gsIFN0b2tlIE5ld2luZ3RvbiIsICJUaGUgU2VrZm9yZGUsIENsZXJrZW53ZWxsIiwgIlRoZSBEb3ZlLCBIYW1tZXJzbWl0aCIsICJUaGUgQ3Jvd24gYW5kIFN1Z2FyIExvYWYsIEZsZWV0IFN0cmVldCIsICJUaGUgTGFtYiwgSG9sYm9ybiIsICJQcmluY2Ugb2YgR3JlZW53aWNoLCBHcmVlbndpY2giLCAiWWUgT2xkZSBNaXRyZSwgSGF0dG9uIEdhcmRlbiIsICJUaGUgR2xvcnksIEhhZ2dlcnN0b24iLCAiVGhlIEJsdWUgUG9zdHMsIFNvaG8iLCAiVGhlIE9sZCBCYW5rIG9mIEVuZ2xhbmQsIEZsZWV0IFN0cmVldCIpCnB1YnNfZGYgPC0gZGF0YS5mcmFtZShQdWJzID0gcHVicywgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQoKIyBydW4gdGhlIGdlb2NvZGUgZnVuY3Rpb24gZnJvbSBnZ21hcCBwYWNrYWdlCgpyZWdpc3Rlcl9nb29nbGUoa2V5ID0gIm1Ra3pUcGlhTFlqUHFYUUJvdGVzZ2lmM0VmR0wyZGJyTlZPcm9nZyIpCnB1YnNfZ2dtYXAgPC0gZ2dtYXA6Omdlb2NvZGUobG9jYXRpb24gPSBwdWJzLCBvdXRwdXQgPSAibW9yZSIsIHNvdXJjZSA9ICJnb29nbGUiKQpwdWJzX2dnbWFwIDwtIGNiaW5kKHB1YnNfZGYsIHB1YnNfZ2dtYXApCgojIHByaW50IHRoZSByZXN1bHRzCnB1YnNfZ2dtYXBbLCAxOjZdCmBgYAoKKioqKioqCgpIQ0EgY3VycmVudGx5IG93bnMgYW5kIG9wZXJhdGVzIGByIGxvY3MgJT4lIGZpbHRlcihzdGF0ZSA9PSAnRkwnKSAlPiUgbnJvd2AgaG9zcGl0YWxzIGluIHRoZSBzdGF0ZSBvZiBGbG9yaWRhLiBVc2UgdGhlIHBsb3QgYmVsb3cgdG8gZXhwbG9yZSBIQ0EgbWFya2V0IHBlbmV0cmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLgoKYGBge3IsIGluY2x1ZGU9VH0KZGYudCA8LSBkZiAlPiUgCiAgIyBmaWx0ZXIoc3RhdGUueD09J0ZMJykgJT4lIAogIGZpbHRlcihvd25lcnNoaXAgPT0gJ0hDQScpICU+JQogIGdyb3VwX2J5KHByb3ZpZGVyX25hbWUpICU+JSAKICBhcnJhbmdlKC15ZWFyKSAlPiUKICBzbGljZSgxKSAlPiUgdW5ncm91cCgpCmZpZyA8LSBkZi50CgogIApmaWcgPC0gZmlnICU+JQogIHBsb3RfbHkoCiAgICBsYXQgPSB+bGF0aXR1ZGUsCiAgICBsb24gPSB+bG9uZ2l0dWRlLAogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICJibHVlIiwgc2l6ZT0gNSooZGYudCRiZWRzICU+JSBsb2cxMCkpLAogICAgdHlwZSA9ICdzY2F0dGVybWFwYm94JywKICAgIGhvdmVydGV4dCA9IHBhc3RlMCgnPGI+JyxkZi50JHRpdGxlLCc8L2I+JywKICAgICAgICAgICAgICAgICAgICAgICAnPGJyPkRpc2NoYXJnZXM6ICcscHJldHR5TnVtKGRmLnQkdG90X2Rpc2NoYXJnZXMsIGJpZy5tYXJrPScsJyksCiAgICAgICAgICAgICAgICAgICAgICAgJzxicj5PcEV4OiAkJyxwcmV0dHlOdW0ocm91bmQoZGYudCR0b3Rfb3BlcmF0aW5nX2V4cC8xZTYsMSksIGJpZy5tYXJrPScsJyksJ00nLAogICAgICAgICAgICAgICAgICAgICAgICc8YnI+QmVkczogJyxwcmV0dHlOdW0oZGYudCRiZWRzLCBiaWcubWFyaz0nLCcpCiAgICAgICAgICAgICAgICAgKQogICAgKSAKZmlnIDwtIGZpZyAlPiUKICBsYXlvdXQoCiAgICBtYXBib3ggPSBsaXN0KAogICAgICBzdHlsZSA9ICdjYXJ0by1wb3NpdHJvbicsCiAgICAgIHpvb20gPTgsCiAgICAgIGNlbnRlciA9IGxpc3QobG9uID0gLTgyLjUsIGxhdCA9IDI3LjkpKSwKICAgbWFyZ2luID0gbGlzdChsID0gMjUsIHIgPSAyNSwKICAgICAgICAgICAgICAgICBiID0gMjUsIHQgPSAyNSwKICAgICAgICAgICAgICAgICBwYWQgPSAyKQogICAgKSAKCmZpZwpgYGAKCldlIGRlZmluZSB0aGUgVGFtcGEtU3QuUGV0ZXJzYnVyZyBtYXJrZXQgYXMgdGhlIGZvdXIgYWRqYWNlbnQgY291bnRpZXM6IFBhc2NvLCBIaWxsc2Jvcm91Z2gsIFBpbmVsbGFzLCBhbmQgSGVybmFuZG8uIE9mIHRoZSA0MSBob3NwaXRhbHMgaW4gdGhlIHJlZ2lvbiBpbiAyMDE5LCA4IGFyZSBIQ0Etb3duZWQgKDIwJSkuCgojIyBTdGF0aXN0aWNhbCBNb2RlbGxpbmcKCldlIGZpcnN0IG1vZGVsIE1lZGljYXJlIGRpc2NoYXJnZXMgaW4gdGhlIHJlZ2lvbiwgY29udHJvbGxpbmcgZm9yIHllYXIgZWZmZWN0cyB1c2luZyBhIE0tZXN0aW1hdG9yIHJvYnVzdCBsZWFzdC1zcXVhcmVzIChSTE0pIGRlc2lnbi4gV2UgZmluZCBhIHNpZ25pZmljYW50IGNvZWZmaWNpZW50IGFzc29jaWF0ZWQgd2l0aCBIQ0Egb3duZXJzaGlwLgoKYGBge3IsIGluY2x1ZGU9VH0KbGlicmFyeShzalBsb3QpCm1jYXJlLmRpcy5sbSA8LSBybG0obWNhcmVfZGlzY2hhcmdlcyB+IG93bmVyc2hpcCt5ZWFyLGRmLnRhbXBhKQptY2FyZS5kaXMubG0gJT4lIHRhYl9tb2RlbChkdi5sYWJlbHMgPSAnTWVkaWNhcmUgRGlzY2hhcmdlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWQubGFiZWxzCT0gYygnSW50ZXJjZXB0JywnSENBIE93bmVyc2hpcCcsJ1llYXIgRWZmZWN0JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgKQpgYGAKCldlIGZpbmQgbm8gc3VjaCBlZmZlY3Qgd2hlbiBtb2RlbGluZyBNZWRpY2FpZCB2b2x1bWVzLgoKYGBge3IsIGluY2x1ZGU9VH0KbWNhaWQuZGlzLmxtIDwtIE1BU1M6OnJsbShtY2FpZF9kaXNjaGFyZ2VzIH4gb3duZXJzaGlwK3llYXIsZGYudGFtcGEpCm1jYWlkLmRpcy5sbSAlPiUgdGFiX21vZGVsKGR2LmxhYmVscyA9ICdNZWRpY2FpZCBEaXNjaGFyZ2VzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZC5sYWJlbHMJPSBjKCdJbnRlcmNlcHQnLCdIQ0EgT3duZXJzaGlwJywnWWVhciBFZmZlY3QnKQogICAgICAgICAgICAgICAgICAgICAgICAgICApCmBgYAoKV2UgdGhlbiBpbXB1dGUgb3RoZXIgZGlzY2hhcmdlcywgIGFjY291bnRpbmcgZm9yIGNvbW1lcmNpYWwgcGF0aWVudHMgYW5kIHVuY29tcGVuc2F0ZWQgY2FyZS4gU3RhbmRhcmRpemluZyB0aGVzZSB2YWx1ZXMgYWdhaW5zdCBob3NwaXRhbCBzaXplLCB3ZSBmaW5kIG5vIHNpZ25pZmljYW50IGVmZmVjdCBvZiBIQ0Egb3duZXJzaGlwLgoKYGBge3IsIGluY2x1ZGU9VH0Kb3RoZXIuZGlzLmxtIDwtIE1BU1M6OnJsbShvdGhlcl9kaXNjaGFyZ2VzL2JlZHMgfiBvd25lcnNoaXAreWVhcixkZi50YW1wYSkKb3RoZXIuZGlzLmxtICU+JSB0YWJfbW9kZWwoZHYubGFiZWxzID0gJ0NvbW1lcmNpYWwgYW5kIFVuY29tcGVuc2F0ZWQgRGlzY2hhcmdlcyBwZXIgQmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZC5sYWJlbHMJPSBjKCdJbnRlcmNlcHQnLCdIQ0EgT3duZXJzaGlwJywnWWVhciBFZmZlY3QnKQogICAgICAgICAgICAgICAgICAgICAgICAgICApCmBgYAoKV2UgbW9kZWwgb3BlcmF0aW5nIGV4cGVuc2VzIHBlciBkaXNjaGFyZ2UsIGEgcHJveHkgZm9yIHNwZW5kIHBlciBwYXRpZW50LgoKYGBge3IsIGluY2x1ZGU9VH0Kb3BleC5sbSA8LSBsbSh0b3Rfb3BlcmF0aW5nX2V4cC90b3RfZGlzY2hhcmdlc35vd25lcnNoaXAreWVhciwKICAgZGF0YT1kZi50YW1wYQogICApCm9wZXgubG0gJT4lIHRhYl9tb2RlbChkdi5sYWJlbHMgPSAnVG90YWwgT3BFeCBwZXIgRGlzY2hhcmdlJywKICAgICAgICAgICAgICAgICAgICAgIHByZWQubGFiZWxzCT0gYygnSW50ZXJjZXB0JywnSENBIE93bmVyc2hpcCcsJ1llYXIgRWZmZWN0JykKKQpgYGAKCgojIyBDb25jbHVzaW9ucwoKT3VyIGFuYWx5c2lzIHNlcnZlcyBhcyBhIHJvdWdoIHJldHJvc3BlY3RpdmUgYW5hbHlzaXMgb2YgYSB0b3AtdGllciBoZWFsdGhjYXJlIGNvbXBhbnkuIFVzaW5nIGZlZGVyYWxseS1hdWRpdGVkIGRhdGEsIHdlIG1hdGNoIHBlci1maXJtIGZpbmFuY2lhbCBwZXJmb3JtYW5jZSB0byBjb3Jwb3JhdGUgZ3Jvd3RoIHN0cmF0ZWdpZXMgaW1wbGVtZW50ZWQgYnkgbGVhZGVyc2hpcC4gSW4gYSBjYXNlIHN0dWR5IG9mIHRoZSBUYW1wYSBtYXJrZXQsIHdlIGZpbmQgcHJlbGltaW5hcnkgZXZpZGVuY2UgdG8gc3VwcG9ydCB2b2x1bWUgZ3Jvd3RoIGluIHNvbWUgb3BlcmF0aW5nIHNlZ21lbnRzLCBub3RhYmx5IHdpdGggTWVkaWNhcmUuIFN0cmlraW5nbHksIHdlIG9ic2VydmUgc3Ryb25nIGV2aWRlbmNlIG9mIGxvd2VyIG9wZXJhdGluZyBleHBlbnNlcyBwZXIgcGF0aWVudCwgc3VwcG9ydGluZyBIQ0EncyBhYmlsaXR5IHRvIGRyaXZlIGdyb3d0aCB3aGlsZSBzdXBwcmVzc2luZyBjb3N0cyBhdCBhIHBlci1mYWNpbGl0eSBsZXZlbC4KClRoZXJlIGFyZSBzZXZlcmFsIGxpbWl0YXRpb25zIHdpdGggb3VyIGFwcHJvYWNoLiBXaGlsZSB3ZSBkcmlsbC1kb3duIHRvIHRoZSBUYW1wYSBtYXJrZXQgdG8gbWFpbnRhaW4gc2ltaWxhciBwYXRpZW50IGFuZCBwYXlvciBtaXhlcyAoZGlzZWFzZSBwcm9maWxlcyBvZiB0aGUgcG9wdWxhdGlvbiwgYW5kIGluc3VyYW5jZSBwcmVmZXJlbmNlcyBpbiB0aGUgcmVnaW9uKSwgd2UgYXJlIHVuYWJsZSB0byBleHRlbmQgb3VyIGNvbmNsdXNpb25zIHRvIG90aGVyIG1hcmtldHMgKGkuZS4gRGFsbGFzLUZvcnQgV29ydGgpIHdpdGhvdXQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBGdXJ0aGVybW9yZSwgd2Ugb21pdCBzZXZlcmFsIGtleSBjb3ZhcmlhdGVzLCBhbmQgZG8gbm90IG1hdGNoIG9ic2VydmF0aW9ucyBvbiBob3NwaXRhbCBhdHRyaWJ1dGVzLiBJbiBvdGhlciB3b3JkcywgTWVkaWNhcmUgcGF0aWVudHMgbWF5IGJlIHNlbGYtc2VsZWN0aW5nIGludG8gSENBIGhvc3BpdGFscyBiYXNlZCBvbiBwb3B1bGF0aW9uIGRpc3RyaWJ1dGlvbnMsIHJlZmVycmFsIG5ldHdvcmtzLCBvciBob3NwaXRhbCBzaXplLCBub3QgbmVjZXNzYXJpbHkgYmVjYXVzZSBvZiBIQ0EgbWFya2V0aW5nIG9yIGxlYWRlcnNoaXAuCgoKKioqKioqCiFbXShhaWYuanBnKXt3aWR0aD0yNSV9Cg==